//package com.gtx.common.util.uuid;
//
//import org.apache.commons.lang3.time.DateFormatUtils;
//
//import java.lang.management.ManagementFactory;
//import java.sql.Timestamp;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Calendar;
//import java.util.Date;
//import java.util.List;
//
//
///**
// * 时间工具类
// *
// */
//public class DateUtils extends org.apache.commons.lang3.time.DateUtils
//{
//    public static String YYYY = "yyyy";
//
//    public static String YYYY_MM = "yyyy-MM";
//
//    public static String YYYYMM = "yyyyMM";
//
//    public static String YYYY_MM_DD = "yyyy-MM-dd";
//
//    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
//
//    public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
//
//    private static final String[] parsePatterns = {
//            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
//            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
//            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
//
//    /**
//     * 获取当前Date型日期
//     *
//     * @return Date() 当前日期
//     */
//    public static Date getNowDate()
//    {
//        return new Date();
//    }
//
//    /**
//     * 获取当前日期, 默认格式为yyyy-MM-dd
//     *
//     * @return String
//     */
//    public static String getDate()
//    {
//        return dateTimeNow(YYYY_MM_DD);
//    }
//
//    public static final String getTime()
//    {
//        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
//    }
//
//    public static final String dateTimeNow()
//    {
//        return dateTimeNow(YYYYMMDDHHMMSS);
//    }
//
//    public static final String dateTimeNow(final String format)
//    {
//        return parseDateToStr(format, new Date());
//    }
//
//    public static final String dateTime(final Date date)
//    {
//        return parseDateToStr(YYYY_MM_DD, date);
//    }
//
//    // 各种时间格式
//    public static final SimpleDateFormat date_sdf = new SimpleDateFormat("yyyy-MM-dd");
//
//    public static final SimpleDateFormat date_sdf_month = new SimpleDateFormat("yyyy-MM");
//
//    public static final String parseDateToStr(final String format, final Date date)
//    {
//        return new SimpleDateFormat(format).format(date);
//    }
//
//    public static final Date dateTime(final String format, final String ts)
//    {
//        try
//        {
//            return new SimpleDateFormat(format).parse(ts);
//        }
//        catch (ParseException e)
//        {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * 日期路径 即年/月/日 如2018/08/08
//     */
//    public static final String datePath()
//    {
//        Date now = new Date();
//        return DateFormatUtils.format(now, "yyyy/MM/dd");
//    }
//
//    /**
//     * 日期路径 即年/月/日 如20180808
//     */
//    public static final String dateTime()
//    {
//        Date now = new Date();
//        return DateFormatUtils.format(now, "yyyyMMdd");
//    }
//
//    /**
//     * 日期型字符串转化为日期 格式
//     */
//    public static Date parseDate(Object str)
//    {
//        if (str == null)
//        {
//            return null;
//        }
//        try
//        {
//            return parseDate(str.toString(), parsePatterns);
//        }
//        catch (Exception e)
//        {
//            return null;
//        }
//    }
//
//    /**
//     * 获取服务器启动时间
//     */
//    public static Date getServerStartDate()
//    {
//        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
//        return new Date(time);
//    }
//
//    /**
//     * 计算两个时间差
//     */
//    public static String getDatePoor(Date endDate, Date nowDate)
//    {
//        long nd = 1000 * 24 * 60 * 60;
//        long nh = 1000 * 60 * 60;
//        long nm = 1000 * 60;
//        // long ns = 1000;
//        // 获得两个时间的毫秒时间差异
//        long diff = endDate.getTime() - nowDate.getTime();
//        // 计算差多少天
//        long day = diff / nd;
//        // 计算差多少小时
//        long hour = diff % nd / nh;
//        // 计算差多少分钟
//        long min = diff % nd % nh / nm;
//        // 计算差多少秒//输出结果
//        // long sec = diff % nd % nh % nm / ns;
//        return day + "天" + hour + "小时" + min + "分钟";
//    }
//
//    public static Date convertToDate(Object obj, Date defaultVal) {
//        return obj == null ? defaultVal : DateUtils.parseDate(convertToString(obj));
//    }
//
//    public static Date convertToDate(Object obj) {
//        return convertToDate(obj, null);
//    }
//
//    public static Date convertToDatetime(Object obj, Date defaultVal) {
//        return obj == null ? defaultVal : DateUtils.strToDateTime(convertToString(obj));
//    }
//
//    public static Date convertToDatetime(Object obj) {
//        return convertToDatetime(obj, null);
//    }
//
//    public static Timestamp convertToTimestamp(Object obj, Timestamp defaultVal) {
//        return obj == null ? defaultVal : Timestamp.valueOf(convertToString(obj));
//    }
//
//    public static Timestamp convertToTimestamp(Object obj) {
//        return convertToTimestamp(obj, null);
//    }
//
//    /**
//     * 字符串转换的带time的Date格式
//     *
//     * @param dateStr
//     * @return
//     */
//    public static Date strToDateTime(String dateStr) {
//        try {
//            return parseDate(dateStr, YYYY_MM_DD_HH_MM_SS);
//        } catch (Exception e) {
//            return null;
//        }
//    }
//
//    /**
//     *  date 转 string
//     */
//    public static final String dateToStr(Date date,String format)
//    {
//        if(null != date){
//            return DateFormatUtils.format(date, format);
//        }
//        return null;
//    }
//
//    public static List<String> cutDate(String dateType, String start, String end) {
//        try {
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//            Date dBegin = sdf.parse(start);
//            Date dEnd = sdf.parse(end);
//            return findDates(dateType, dBegin, dEnd);
//        } catch (Exception e) {
//            System.out.println(e);
//        }
//        return null;
//    }
//
//    public static List<String> findDates(String dateType, Date dBegin, Date dEnd) throws Exception {
//        List<String> listDate = new ArrayList<>();
//        Calendar calBegin = Calendar.getInstance();
//        calBegin.setTime(dBegin);
//        listDate.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calBegin.getTime()));
//        Calendar calEnd = Calendar.getInstance();
//        calEnd.setTime(dEnd);
//        while (calEnd.after(calBegin)) {
//            switch (dateType) {
//                case "M":
//                    calBegin.add(Calendar.MONTH, 1);
//                    break;
//                case "D":
//                    calBegin.add(Calendar.DAY_OF_YEAR, 1);break;
//                case "H":
//                    calBegin.add(Calendar.HOUR, 1);break;
//                case "N":
//                    calBegin.add(Calendar.SECOND, 1);break;
//                default: break;
//            }
//            if (calEnd.after(calBegin)) {
//                listDate.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calBegin.getTime()));
//            } else {
//                listDate.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calEnd.getTime()));
//            }
//        }
//        return listDate;
//    }
//
//    /**
//     * 当前时间的前一个月的第一天
//     * @return
//     */
//    public static String getPreviousMonthFirstDay(){
//        Calendar c = Calendar.getInstance();
//        c.setTime(new Date());
//        c.add(Calendar.MONTH, -1);
//        c.set(Calendar.DAY_OF_MONTH, 1);
//        Date m = c.getTime();
//        String mon = date_sdf.format(m);
//        return mon;
//    }
//
//    /**
//     * 当前时间的前一个月
//     * @return
//     */
//    public static String getMonthLastDay(String startMonth){
//        Calendar c = Calendar.getInstance();
//        //这里先设置要获取月份的下月的第一天
//        c.set(Integer.parseInt(startMonth.substring(0,4)), Integer.parseInt(startMonth.substring(5,7)), 1);
//        //这里将日期值减去一天，从而获取到要求的月份最后一天
//        c.add(Calendar.DATE, -1);
//        String lastDayOfMonth = date_sdf.format(c.getTime());
//        return lastDayOfMonth;
//    }
//
//    /****
//     * 传入具体日期 ，返回具体日期增加一个月。
//     * @param date 日期(2018-08-25)
//     * @return 2018-09-25
//     * @throws ParseException
//     */
//    public static Date subMonth(Date date, int amount) {
//        Date dt1 = null;
//        try{
//            Calendar rightNow = Calendar.getInstance();
//            rightNow.setTime(date);
//            rightNow.add(Calendar.MONTH, amount);
//            dt1 = rightNow.getTime();
//        } catch (Exception ex){
//            ex.printStackTrace();
//        }
//        return dt1;
//    }
//
//    public static String yesterday(){
//        Date today = new Date();//获取今天的日期
//        Calendar c = Calendar.getInstance();
//        c.setTime(today);
//        c.add(Calendar.DAY_OF_MONTH, -1);
//        Date yesterday = c.getTime();//这是昨天
//        return DateFormatUtils.format(yesterday, "yyyy-MM-dd");
//    }
//
//    /**
//     * 获取当前日期的前一个月的第一天和最后一天
//     * @return
//     */
//    public static List<String> getMonthInfo(){
//        List<String> strList = new ArrayList<>();
//        //获取前一个月第一天
//        Calendar calendar1 = Calendar.getInstance();
//        calendar1.add(Calendar.MONTH, -1);
//        calendar1.set(Calendar.DAY_OF_MONTH,1);
//        String firstDay = date_sdf.format(calendar1.getTime());
//        strList.add(firstDay);
//        //获取前一个月最后一天
//        Calendar calendar2 = Calendar.getInstance();
//        calendar2.set(Calendar.DAY_OF_MONTH, 0);
//        String lastDay = date_sdf.format(calendar2.getTime());
//        strList.add(firstDay);
//        return strList;
//    }
//
//    /**
//     * 当前日期的前一个月
//     * @return
//     */
//    public static String monthBefore(){
//        //获取前一个月第一天
//        Calendar calendar1 = Calendar.getInstance();
//        calendar1.add(Calendar.MONTH, -1);
//        calendar1.set(Calendar.DAY_OF_MONTH,1);
//        String month = date_sdf_month.format(calendar1.getTime());
//        return month;
//    }
//
//
//}
